package tour.view;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

//다운로드를 처리할 View
public class DownloadView extends AbstractView{
	
	private String uploadDirectory;
	public DownloadView(String uploadDirectory){
		this.uploadDirectory = uploadDirectory;
	}
	@Override
	//응답할 Content의 타입을 return
	public String getContentType() {
		return "application/octet-stream";
	}
	@Override
	//응답 처리하는 메소드
	protected void renderMergedOutputModel(Map<String, Object> model,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		String fileName = (String)model.get("fileName");
		File file = new File(uploadDirectory, fileName);//다운 로드시킬 파일

		//응답처리
		//1. 응답 헤더 정보 설정
		response.setContentType(getContentType());
		//2. 다운로드 파일 명을 지정
		String newFileName = new String(fileName.getBytes("euc-kr"), "8859_1");
		response.setHeader("Content-Disposition", 
								    "attachment; filename="+newFileName);
		//3. 파일 다운로드 처리 - file->web browser i/o작업
		
		OutputStream os = response.getOutputStream();//응답 출력 stream
		FileInputStream fi = new FileInputStream(file);
																	     //다운로드 시킬 파일의 입력 stream
		FileCopyUtils.copy(fi, os);
		
	
	}
	
	
}
























